1. Make __softirq_pending a long, since PPC borrows the file
hardirq.h from us and they only do atomic ops on longs.
2. do_softirq() explicitly takes a void param list.
3. Remove idle_timestamp field from irq_cpustat. It's unused
and lets us simplify the idle loop a little bit.
Part 1 based on a patch from Hollis Blanchard at IBM.
Signed-off-by: Keir Fraser <keir@xensource.com>
for ( ; ; )
{
- irq_stat[cpu].idle_timestamp = jiffies;
+ page_scrub_schedule_work();
- while ( !softirq_pending(cpu) )
- {
- page_scrub_schedule_work();
- default_idle();
- }
+ default_idle();
- do_softirq();
+ if ( softirq_pending(cpu) )
+ do_softirq();
}
}
static softirq_handler softirq_handlers[NR_SOFTIRQS];
-asmlinkage void do_softirq()
+asmlinkage void do_softirq(void)
{
- unsigned int i, pending, cpu = smp_processor_id();
+ unsigned int i, cpu = smp_processor_id();
+ unsigned long pending;
pending = softirq_pending(cpu);
ASSERT(pending != 0);
#include <xen/cache.h>
typedef struct {
- unsigned int __softirq_pending;
+ unsigned long __softirq_pending;
unsigned int __local_irq_count;
unsigned int __nmi_count;
- unsigned long idle_timestamp;
} __cacheline_aligned irq_cpustat_t;
#include <xen/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */